package javachongkao.面向对象上.覆盖;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.Scanner;
//7-5 jmu-Java-03面向对象基础-05-覆盖
//Java每个对象都继承自Object,都有equals、toString等方法。
//现在需要定义PersonOverride类并覆盖其toString与equals方法。
//
//1. 新建PersonOverride类
//a. 属性：String name、int age、boolean gender，所有的变量必须为私有(private)。
//
//b. 有参构造方法，参数为name, age, gender
//
//c. 无参构造方法，使用this(name, age,gender)调用有参构造方法。参数值分别为"default",1,true
//
//d.toString()方法返回格式为：name-age-gender
//
//e. equals方法需比较name、age、gender，这三者内容都相同，才返回true.
//
//2. main方法
//2.1 输入n1，使用无参构造方法创建n1个对象，放入数组persons1。
//2.2 输入n2，然后指定name age gender。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在，如果不存在，才将该对象放入数组persons2。
//2.3 输出persons1数组中的所有对象
//2.4 输出persons2数组中的所有对象
//2.5 输出persons2中实际包含的对象的数量
//2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出PersonOverride的所有构造方法。
//
//提示：使用ArrayList代替数组大幅复简化代码，请尝试重构你的代码。
public class Main{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n1= sc.nextInt();
        boolean f=true;
        sc.nextLine();
        ArrayList<PersonOverride> ap=new ArrayList<PersonOverride>();
        for (int i=0;i<n1;i++){
            ap.add(new PersonOverride());
        }
        int n2= sc.nextInt();
        sc.nextLine();
        for (int i=0;i<n2;i++){
            f=true;
            PersonOverride a=new PersonOverride(sc.next(),sc.nextInt(), sc.nextBoolean());
            sc.nextLine();
            for (PersonOverride aa:ap) {
                if (aa.equals(a)){
                    f=false;
                    break;
                }
            }
            if (f)ap.add(a);
        }

        for(PersonOverride a:ap){
            System.out.println(a.toString().replace("[","").replace("]",""));
        }
        System.out.println(ap.size()-n1);
        System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
    }

}

class PersonOverride{
    private String name;
    private  int age;
    private boolean gender;

    public PersonOverride() {
        this("default",1,true);
    }

    public PersonOverride(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }


    @Override
    public String toString() {
        return name + "-" + age + "-" + gender;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PersonOverride that = (PersonOverride) o;
        return age == that.age &&
                gender == that.gender &&
                name.equals(that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, gender);
    }
}
